/**
 * 
 */
package game.breeze.util;

import org.apache.commons.lang.RandomStringUtils;
import org.apache.log4j.Logger;

/**
 * @author wang
 *
 */
public class MathTools {
	private final static Logger LOGGER = Logger.getLogger(MathTools.class);
	/**
	 * 返回指定位数的随机字符串
	 * @param length
	 * @return String
	 */
	public static String getRandomString(int length)
	{
		if(length==0)
		{
			length=6;
		}
		String string="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		
		return RandomStringUtils.random(length, string);
	}
	/**
	 * 返回指定位数的随机数
	 * @param length
	 * @return id
	 */
	public static int getRandomNumber(int length)
	{ 
		if(length==0)
		{
			length=6;
		}
		int result = (int)(Math.random() * Math.pow(10, length));
		while(result < Math.pow(10, length - 1))
		{
			result = (int)(Math.random() * Math.pow(10, length));
		}
		return result;
	}
	
	/**
	 * 如果发生异常返回１
	 * 
	 * @param object
	 * 
	 * @return 如果发生异常返回１
	 */
	public static int getIntOverZero(Object object) {
		try {

			int number = Integer.parseInt(object.toString().trim());

			return number;

		} catch (Exception ex) {
			return 1;
		}
	}

	/**
	 * 如果发生异常返回１
	 * 
	 * @param object
	 * 
	 * @return 如果发生异常返回１
	 */
	public static long getLongOverZero(Object object) {
		try {

			long number = Long.parseLong(object.toString().trim());

			return number;

		} catch (Exception ex) {
			return 1;
		}
	}

	/**
	 * 如果发生异常返回0
	 * 
	 * @param String
	 * 
	 * @return int
	 */
	public static int getInteger(Object object) {
		try {

			int number = Integer.parseInt(object.toString().trim());

			return number;

		} catch (Exception ex) {
			return 0;
		}
	}

	/**
	 * 如果发生异常返回0
	 * 
	 * @param String
	 * 
	 * @return long
	 */
	public static long getLong(Object object) {
		try {

			long number = Long.parseLong(object.toString().trim());

			return number;

		} catch (Exception ex) {
			return 0;
		}
	}
	
	/**
	 * 检测+10%,-10%  +10 -10是否大于指定的数,或百分比
	 * @param conditionValue 条件表达式
	 * @param propertyValue 属性值
	 */
	public static int update(String conditionValue,int propertyValue){
		
		return MathTools.update(conditionValue, propertyValue,0,0);
	}
	/**
	 * 检测+10%,-10%  +10 -10是否大于指定的数,或百分比
	 * @param conditionValue 条件表达式
	 * @param propertyValue 属性值
	 * @param denominator 属性百分比时分母
	 * @param offer 倍数偏移量
	 * @return
	 */
	public static int update(String conditionValue,int propertyValue, int propertyValue2,int offer){
		
		if(conditionValue.indexOf('+')>-1)
		{// 大于
			conditionValue=conditionValue.replace('+',' ');
			
			if(conditionValue.indexOf('%')>-1)
			{// 百分比
				
				int value=MathTools.getInteger(conditionValue.replace('%',' '));
				try
				{		
					if(offer!=0)
					{
						return propertyValue+offer*propertyValue*value/propertyValue2;
					}else
					{
						return propertyValue+propertyValue*value/propertyValue2;
					}
						
					
				}catch(Exception ex)
				{
						LOGGER.error("更新条件表达式时没有提供完整参数 表达式=%+"+value);
						return value;
				}
				
			}else
			{// 固定数值
				int value=MathTools.getInteger(conditionValue);
				if(offer!=0)
				{
					return propertyValue+offer*value;
				}else
				{
					return propertyValue+value;
				}
			}
		}else
		{// 小于
			if(conditionValue.indexOf('%')>-1)
			{// 百分比
				int value=Math.abs(MathTools.getInteger(conditionValue.replace('%',' ')));
				try
				{
					return propertyValue-propertyValue*value/propertyValue2;
				}catch(Exception ex)
				{
						LOGGER.error("更新条件表达式时没有提供完整参数 表达式=%-"+value);
						return value;
				}
			}else
			{// 固定数
				int value=Math.abs(MathTools.getInteger(conditionValue));
			
					return propertyValue-value;
			}
		}
	}
	
	/**
	 * 检测+10%,-10%  +10 -10是否大于指定的数,或百分比
	 * @param conditionValue 条件表达式
	 * @param propertyValue 属性值
	 * @param denominator 属性百分比时分母
	 * @return
	 */
	public static boolean check(String conditionValue,int propertyValue, int propertyValue2){
		
		if(conditionValue.indexOf('+')>-1)
		{// 大于
			conditionValue=conditionValue.replace('+',' ');
			
			if(conditionValue.indexOf('%')>-1)
			{// 百分比
				
				int value=MathTools.getInteger(conditionValue.replace('%',' '));
				try
				{
					if(propertyValue*100/(propertyValue2)>value)
					{
						return true;
					}
				}catch(Exception ex)
				{
						LOGGER.error("更新条件表达式时没有提供完整参数 表达式=%+"+value);
						return false;
				}
				
			}else
			{// 固定数值
				int value=MathTools.getInteger(conditionValue);
				if(propertyValue>value)
				{// 属性值是否满足大于中指定的值是则触发
					return true;
				}
			}
		}else if (conditionValue.indexOf('-')>-1)
		{// 小于
			if(conditionValue.indexOf('%')>-1)
			{// 百分比
				int value=Math.abs(MathTools.getInteger(conditionValue.replace('%',' ')));
				try
				{
					if(propertyValue*100/(propertyValue2)<value)
					{
						return true;
					}
				}catch(Exception ex)
				{
						LOGGER.error("更新条件表达式时没有提供完整参数 表达式=%-"+value);
						return false;
				}
			}else
			{// 固定数
				int value=Math.abs(MathTools.getInteger(conditionValue.replace('%',' ')));
				if(propertyValue<value)
				{// 属性值是否满足小于指定的值是则触发
					return true;
				}
			}
		}else
		{
			//小于
			if(conditionValue.indexOf('%')>-1)
			{// 百分比
				int value=Math.abs(MathTools.getInteger(conditionValue.replace('%',' ')));
				try
				{
					if(propertyValue*100/(propertyValue2)==value)
					{
						return true;
					}
				}catch(Exception ex)
				{
						LOGGER.error("更新条件表达式时没有提供完整参数 表达式=%="+value);
						return false;
				}
			}else
			{// 固定数
				int value=Math.abs(MathTools.getInteger(conditionValue.replace('%',' ')));
				if(propertyValue==value)
				{// 属性值是否满足等于指定的值是则触发
					return true;
				}
			}
		}
		return false;
	}
}
